package LeetCode.Leet100_199.Leet160_169.Leet160;

/**
 * @ClassName Solution_1
 * @Author 孙天赐
 * @Date 2025/9/25 11:15
 * @Description TODO: 方法一   双指针 1ms 99.96%
 *                  两个指针分别指向两个链表的头节点，每次循环，两个指针分别向前移动一位
 *                  若指针走到了当前链表的末尾，则将指针移动到另一个链表的头节点上
 *                  当两指针指向的节点相同，要么是目标节点（如果链表相交），要么同时走到了末尾（此时说明链表没有相交）
 */
public class Solution_1 {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode t1 = headA;
        ListNode t2 = headB;
        while (t1 != t2) {

            if (t1 == null) {
                // 从链表A移动到链表B
                t1 = headB;
            } else {
                t1 = t1.next;
            }

            if (t2 == null) {
                // 从链表B移动到链表A
                t2 = headA;
            } else {
                t2 = t2.next;
            }

        }
        return t1;
    }
}
